import { faker } from '@faker-js/faker';

// 基础用户接口
export interface IBaseUser {
    id: string;
    name: string;
    avatar: string;
    createTime: Date;
    sex: string;
}

// 普通用户接口
export interface IUser extends IBaseUser {
    followings: number;   //用户关注的人
    followers: number;      //  用户的粉丝 
    likedSongs: string[];  // 收藏的歌曲ID
}

// 歌手接口
export interface IArtist extends IBaseUser {
    followers: number;       
    description: string;
    songs: string[];      // 发布的歌曲ID
    albums: string[];     // 发布的专辑ID
    category: string[];   // 歌手分类（如：流行、摇滚等）
}
 
// 既是用户又是歌手的情况
export type IUserArtist = IUser & IArtist;



// 生成单个 Album 的模拟数据
export function generateUserArtist(): IUserArtist {

    const generteSongidList = () =>{
        const songIdList: string[] = [];
        for(let i = 0; i < faker.number.int({ min: 1, max: 10 }); i++){
            songIdList.push(faker.number.int({ min: 1, max: 10000 }).toString());
        }
        return songIdList;
    }
    const generteAlbumidList = () =>{
        const albumIdList: string[] = [];
        for(let i = 0; i < faker.number.int({ min: 1, max: 5 }); i++){
            albumIdList.push(faker.number.int({ min: 1, max: 10000 }).toString());
        }
        return albumIdList;
    }
    const generteCategoryList = () =>{
        const categoryListEnum = [
            "全部",
            "华语男",
            "华语女",
            "华语组合",
            "日韩男",
            "日韩女",
            "日韩组合",
            "欧美男",
            "欧美女",
            "欧美组合",
            "其他"
        ];
        // 创建一个副本以避免修改原数组
        const availableCategories = [...categoryListEnum];
        const categoryList: string[] = [];
        // 随机选择1-5个不重复的分类
        const count = faker.number.int({ min: 1, max: Math.min(5, availableCategories.length) });
        
        for(let i = 0; i < count; i++){
            // 随机选择一个索引
            const randomIndex = faker.number.int({ min: 0, max: availableCategories.length - 1 });
            // 从可用分类中移除并添加到结果中
            categoryList.push(availableCategories.splice(randomIndex, 1)[0]);
        }
        return categoryList;
    }
    return {
        id: faker.number.int({ min: 1, max: 10000 }).toString(), // 转为字符串
        name: faker.music.songName().slice(0, 10), // 使用 faker.music.songName 生成专辑名称
        avatar: faker.image.url(), // 使用 faker.image.url 生成图片 URL
        description: faker.lorem.paragraph(), // 生成一段随机的文本作为简介
        followers:faker.number.int({ min: 1, max: 10000 }),
        createTime:faker.date.anytime(),
        songs:generteSongidList(),
        albums:generteAlbumidList(),
        category:generteCategoryList(),
        followings:faker.number.int({ min: 1, max: 10000 }),
        likedSongs:generteSongidList(),
        sex:faker.person.sex()
    };
}

// 生成多个 Song 的模拟数据，数量随机
export function generateUserArtists(maxCount: number = 50): Promise<IUserArtist[]> {
    const randomCount = faker.number.int({ min: 1, max: maxCount });
    const UserArtists: IUserArtist[] = [];
    
    for (let i = 0; i < randomCount; i++) {
        UserArtists.push(generateUserArtist());
    }
    
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(UserArtists);
        }, 0);
    });
}

// 示例：生成最多 50 首歌的模拟数据
export const mockUserArtists = generateUserArtists();

 